package com.jpsl.core.items;

/**
 * then 执行
 *
 * @param <E>
 * @param <ES>
 * @author 懒王猫
 */
public final class Then<E, ES extends Items<E>> {

    private final Branches<E> branches;

    private final ES es;

    Then(Branches<E> branches, ES es) {
        this.branches = branches;
        this.es = es;
    }

    /**
     * 没有使用 condition.negate().and(other), 这种方式跟实际 if else 的处理逻辑有一点不同, 某些场景空指针无法避免
     *
     * @param other else condition
     * @return
     */
    public If<E, ES> $elseIf(Condition other) {
        return new If<>(branches, other, es);
    }

    public If<E, ES> $else() {
        return $elseIf(() -> true);
    }

    @SuppressWarnings("unchecked")
    public ES $endIf() {
        return (ES) es.add(branches.getItem());
    }

}
